#ifndef SIMPLE_VECTOR_MATRIX_H
#define SIMPLE_VECTOR_MATRIX_H

struct Point {
	double x, y;
};

struct Point3D {
	double x, y, z;
};

void average(Point &p1, Point &p2, int n);

double distance(Point &p1, Point &p2);

Point distance_v(Point &p1, Point &p2);

Point3D distance_v(Point3D &p1, Point3D &p2);

void correct(Point3D &p1, Point3D &p2, int n);

void transposeMatrix16(float* m);

void transposeMatrix9(float* m);

float dot(float* v1, float* v2, int size);

float length(float* v, int size);

float angleBetweenVectors2(float* v1, float* v2);

void mult9(float *A, float *B, float *C);

void matrix2axis_angle4(float* pose_matrix, float &alpha, float &x, float &y, float &z);

void axis_angle2matrix4(float alpha, float x, float y, float z, float* pose_matrix);

void rotate_matrix(float* pose_matrix, float angle);

void mult_mat_vector4(double* M, double* v, double* r);

#endif //SIMPLE_VECTOR_MATRIX_H
